{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<img src=\".\\\\diyLogo.png\" alt=\"some_text\">\n",
    "<h1> 第二讲 程序设计基础</h1>\n",
    "<a id=backup></a>\n",
    "<H2>目录</H2>  \n",
    "\n",
    "[2.1 程序执行过程](#Section1)  \n",
    "[2.2 程序实例](#Section2)  \n",
    "[2.3 程序的基本结构](#Section3)     \n",
    "[2.4 顺序结构](#Section4)  \n",
    "[2.5 分支结构](#Section5)  \n",
    "[2.6 循环结构](#Section6) "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<a id = Section1> </a>\n",
    "## 2.1 程序执行过程\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[<matplotlib.lines.Line2D at 0x24624440590>,\n",
       " <matplotlib.lines.Line2D at 0x246244404a0>]"
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import numpy as np\n",
    "import matplotlib as mpl\n",
    "import matplotlib.pyplot as plt\n",
    "x = np.linspace(0,100*np.pi)\n",
    "plt.plot(x,np.sin(x),x,np.cos(x))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 程序设计语言：机器语言、汇编语言、高级语言\n",
    "## 编译和解释\n",
    "编译：fortran C C++ C#\n",
    "解释：basic JavaScript PHP \n",
    "Python？？？\n",
    "Python语言执行的几种方式：\n",
    "\n",
    "分析程序执行过程-IPO：  \n",
    "a. Input模块：  \n",
    "b. Process模块：  \n",
    "c. Output模块：  \n",
    "\n",
    "\n",
    "\n",
    "[返回](#backup)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<a id = Section2> </a>\n",
    "## 2.2 程序实例\n",
    "\n",
    "<p><a href=\"https://yanghailin.blog.csdn.net/article/details/81126087?utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7Edefault-5.no_search_link&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7Edefault-5.no_search_link\">\n",
    "this is example of python</a></p"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "24\n",
      "['123', '124', '132', '134', '142', '143', '213', '214', '231', '234', '241', '243', '312', '314', '321', '324', '341', '342', '412', '413', '421', '423', '431', '432']\n"
     ]
    }
   ],
   "source": [
    "\"\"\"\n",
    "Created on Thu Jul 19 19:51:08 2018\n",
    "有四个数字：1、2、3、4，能组成多少个互不相同且无重复数字的三位数？各是多少？\n",
    "@author: yhl\n",
    "\"\"\"\n",
    " \n",
    "L=[]\n",
    "a=[1,2,3,4]\n",
    " \n",
    "#for i in range(len(a)):\n",
    " \n",
    "for val_1 in a:   #   for(i=1;i<n;I++)\n",
    "    for val_2 in a:\n",
    "        for val_3 in a:\n",
    "            if(val_1 == val_2 or val_1 == val_3 or val_2 == val_3):\n",
    "                continue;\n",
    "            else:\n",
    "                L.append(str(val_1)+str(val_2)+str(val_3))\n",
    " \n",
    " \n",
    "print(len(L)) \n",
    "print (L)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "1 2 3 n= 1\n",
      "1 2 4 n= 2\n",
      "1 3 2 n= 3\n",
      "1 3 4 n= 4\n",
      "1 4 2 n= 5\n",
      "1 4 3 n= 6\n",
      "2 1 3 n= 7\n",
      "2 1 4 n= 8\n",
      "2 3 1 n= 9\n",
      "2 3 4 n= 10\n",
      "2 4 1 n= 11\n",
      "2 4 3 n= 12\n",
      "3 1 2 n= 13\n",
      "3 1 4 n= 14\n",
      "3 2 1 n= 15\n",
      "3 2 4 n= 16\n",
      "3 4 1 n= 17\n",
      "3 4 2 n= 18\n",
      "4 1 2 n= 19\n",
      "4 1 3 n= 20\n",
      "4 2 1 n= 21\n",
      "4 2 3 n= 22\n",
      "4 3 1 n= 23\n",
      "4 3 2 n= 24\n"
     ]
    }
   ],
   "source": [
    "n=0\n",
    "for i in range(1,5):\n",
    "    for j in range(1,5):\n",
    "        for k in range(1,5):\n",
    "            if( i != k ) and (i != j) and (j != k):\n",
    "                n=n+1\n",
    "                print (i,j,k,\"n=\",n)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "profit= 1.0\n"
     ]
    }
   ],
   "source": [
    "'''\n",
    "企业发放的奖金根据利润提成。\n",
    "利润(I)低于或等于10万元时，奖金可提10%；\n",
    "利润高于10万元，低于20万元时，低于10万元的部分\n",
    "按10%提成，高于10万元的部分，可提成7.5%；\n",
    "20万到40万之间时，高于20万元的部分，可提成5%；\n",
    "40万到60万之间时高于40万元的部分，可提成3%；\n",
    "60万到100万之间时，高于60万元的部分，可提成1.5%;\n",
    "高于100万元时,超过100万元的部分按1%提成。\n",
    "从键盘输入当月利润I，求应发放奖金总数？\n",
    "'''\n",
    " \n",
    "profit = 0\n",
    "I = int(input(\"please input: \"))\n",
    "if(I<=10):\n",
    "    profit = 0.1 * I\n",
    "elif(I <= 20):\n",
    "    profit = 10 *0.1 + (I - 10)*0.075\n",
    "elif(I <=40):\n",
    "    profit = 10 * 0.1 + (20 - 10)*0.075 + (I - 20)*0.05\n",
    "elif(I <= 60):\n",
    "    profit = 10 * 0.1 + (20 - 10)*0.075 + (40 - 20)*0.05 + (I - 40)*0.03\n",
    "elif(I <= 100):\n",
    "    profit = 10 * 0.1 + (20 - 10)*0.075 + (40 - 20)*0.05 + (60 - 40)*0.03 + (I - 60)*0.015\n",
    "else : \n",
    "    profit = 10 * 0.1 + (20 - 10)*0.075 + (40 - 20)*0.05 + (60 - 40)*0.03 + (100 - 60)*0.015 + (I -100)*0.01\n",
    "    \n",
    "print (\"profit=\",profit)\n",
    "        "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "1.0\n",
      "profit= 1.0\n"
     ]
    }
   ],
   "source": [
    "i = int(input('净利润:'))\n",
    "arr = [1000000,600000,400000,200000,100000,0]\n",
    "rat = [0.01,0.015,0.03,0.05,0.075,0.1]\n",
    "r = 0\n",
    "for idx in range(0,6):\n",
    "    if i>arr[idx]:\n",
    "        r+=(i-arr[idx])*rat[idx]#r=r+nnn\n",
    "        print((i-arr[idx])*rat[idx])\n",
    "        i=arr[idx]\n",
    "print (\"profit=\",r)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Python 数字类型转换\n",
    "有时候，我们需要对数据内置的类型进行转换，数据类型的转换，你只需要将数据类型作为函数名即可。\n",
    "\n",
    "int(x) 将x转换为一个整数。\n",
    "\n",
    "float(x) 将x转换到一个浮点数。\n",
    "\n",
    "complex(x) 将x转换到一个复数，实数部分为 x，虚数部分为 0。\n",
    "\n",
    "complex(x, y) 将 x 和 y 转换到一个复数，实数部分为 x，虚数部分为 y。x 和 y 是数字表达式。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<a id=Section3></a>\n",
    "## 2.3程序的基本结构\n",
    "结构化程序的三大基本结构：\n",
    "\n",
    "a.顺序结构  \n",
    "b.分支结构  \n",
    "c.循环结构  \n",
    "\n",
    "\n",
    "\n",
    "\n",
    "[返回](#backup)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<a id=Section4></a>\n",
    "## 2.4顺序结构\n",
    "\n",
    "### 数学函数\n",
    "<table><tr>\n",
    "<th>函数</th><th>返回值 ( 描述 )</th></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-abs.html\" rel=\"noopener noreferrer\">abs(x)</a></td><td>返回数字的绝对值，如abs(-10) 返回 10</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-ceil.html\" rel=\"noopener noreferrer\">ceil(x) </a></td><td>返回数字的上入整数，如math.ceil(4.1) 返回 5</td></tr>\n",
    "<tr><td><p>cmp(x, y)</p></td>\n",
    "<td>如果 x &lt; y 返回 -1, 如果 x == y 返回 0, 如果 x &gt; y 返回 1。 <strong style=\"color:red\">Python 3 已废弃，使用 (x&gt;y)-(x&lt;y) 替换</strong>。 </td>\n",
    "</tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-exp.html\" rel=\"noopener noreferrer\">exp(x) </a></td><td>返回e的x次幂(e<sup>x</sup>),如math.exp(1) 返回2.718281828459045</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-fabs.html\" rel=\"noopener noreferrer\">fabs(x)</a></td><td>返回数字的绝对值，如math.fabs(-10) 返回10.0</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-floor.html\" rel=\"noopener noreferrer\">floor(x) </a></td><td>返回数字的下舍整数，如math.floor(4.9)返回 4</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-log.html\" rel=\"noopener noreferrer\">log(x) </a></td><td>如math.log(math.e)返回1.0,math.log(100,10)返回2.0</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-log10.html\" rel=\"noopener noreferrer\">log10(x) </a></td><td>返回以10为基数的x的对数，如math.log10(100)返回 2.0</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-max.html\" rel=\"noopener noreferrer\">max(x1, x2,...) </a></td><td>返回给定参数的最大值，参数可以为序列。</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-min.html\" rel=\"noopener noreferrer\">min(x1, x2,...) </a></td><td>返回给定参数的最小值，参数可以为序列。</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-modf.html\" rel=\"noopener noreferrer\">modf(x) </a></td><td>返回x的整数部分与小数部分，两部分的数值符号与x相同，整数部分以浮点型表示。</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-pow.html\" rel=\"noopener noreferrer\">pow(x, y)</a></td><td> x**y 运算后的值。</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-round.html\" rel=\"noopener noreferrer\">round(x [,n])</a></td><td><p>返回浮点数 x 的四舍五入值，如给出 n 值，则代表舍入到小数点后的位数。</p>\n",
    "<p><strong>其实准确的说是保留值将保留到离上一位更近的一端。</strong></p>\n",
    "</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-sqrt.html\" rel=\"noopener noreferrer\">sqrt(x) </a></td><td>返回数字x的平方根。</td></tr>\n",
    "</table>\n",
    "\n",
    "### 随机数函数\n",
    "随机数可以用于数学，游戏，安全等领域中，还经常被嵌入到算法中，用以提高算法效率，并提高程序的安全性。\n",
    "\n",
    "Python包含以下常用随机数函数：\n",
    "\n",
    "<table><tr>\n",
    "<th>函数</th><th>描述</th></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-choice.html\" rel=\"noopener noreferrer\">choice(seq)</a></td><td>从序列的元素中随机挑选一个元素，比如random.choice(range(10))，从0到9中随机挑选一个整数。</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-randrange.html\" rel=\"noopener noreferrer\">randrange ([start,] stop [,step]) </a></td><td>从指定范围内，按指定基数递增的集合中获取一个随机数，基数默认值为 1</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-random.html\" rel=\"noopener noreferrer\">random() </a></td><td> 随机生成下一个实数，它在[0,1)范围内。</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-seed.html\" rel=\"noopener noreferrer\">seed([x]) </a></td><td>改变随机数生成器的种子seed。如果你不了解其原理，你不必特别去设定seed，Python会帮你选择seed。</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-shuffle.html\" rel=\"noopener noreferrer\">shuffle(lst) </a></td><td>将序列的所有元素随机排序</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-uniform.html\" rel=\"noopener noreferrer\">uniform(x, y)</a></td><td>随机生成下一个实数，它在[x,y]范围内。</td></tr>\n",
    "</table>\n",
    "\n",
    "### 三角函数\n",
    "Python包括以下三角函数：\n",
    "<table><tr>\n",
    "<th>函数</th><th>描述</th></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-acos.html\" rel=\"noopener noreferrer\">acos(x)</a></td><td>返回x的反余弦弧度值。</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-asin.html\" rel=\"noopener noreferrer\">asin(x)</a></td><td>返回x的反正弦弧度值。</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-atan.html\" rel=\"noopener noreferrer\">atan(x)</a></td><td>返回x的反正切弧度值。</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-atan2.html\" rel=\"noopener noreferrer\">atan2(y, x)</a></td><td>返回给定的 X 及 Y 坐标值的反正切值。</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-cos.html\" rel=\"noopener noreferrer\">cos(x)</a></td><td>返回x的弧度的余弦值。</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-hypot.html\" rel=\"noopener noreferrer\">hypot(x, y)</a></td><td>返回欧几里德范数 sqrt(x*x + y*y)。 </td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-sin.html\" rel=\"noopener noreferrer\">sin(x)</a></td><td>返回的x弧度的正弦值。</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-tan.html\" rel=\"noopener noreferrer\">tan(x)</a></td><td>返回x弧度的正切值。</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-degrees.html\" rel=\"noopener noreferrer\">degrees(x)</a></td><td>将弧度转换为角度,如degrees(math.pi/2) ，  返回90.0</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-radians.html\" rel=\"noopener noreferrer\">radians(x)</a></td><td>将角度转换为弧度</td></tr>\n",
    "</table>\n",
    "\n",
    "### 数学常量\n",
    "\n",
    "<table><tr>\n",
    "<th>常量</th><th>描述</th></tr>\n",
    "<tr><td>pi</td><td>数学常量 pi（圆周率，一般以π来表示）</td></tr>\n",
    "<tr><td>e</td><td>数学常量 e，e即自然常数（自然常数）。</td></tr>\n",
    "</table>\n",
    "\n",
    "[返回](#backup)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/svg+xml": [
       "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n",
       "<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\n",
       " \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n",
       "<!-- Generated by graphviz version 12.2.0 (20241103.1931)\n",
       " -->\n",
       "<!-- Title: 顺序结构 Pages: 1 -->\n",
       "<svg width=\"214pt\" height=\"476pt\"\n",
       " viewBox=\"0.00 0.00 214.11 476.00\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n",
       "<g id=\"graph0\" class=\"graph\" transform=\"scale(1 1) rotate(0) translate(4 472)\">\n",
       "<title>顺序结构</title>\n",
       "<polygon fill=\"white\" stroke=\"none\" points=\"-4,4 -4,-472 210.11,-472 210.11,4 -4,4\"/>\n",
       "<!-- 1 -->\n",
       "<g id=\"node1\" class=\"node\">\n",
       "<title>1</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"130.06,-468 76.06,-468 76.06,-432 130.06,-432 130.06,-468\"/>\n",
       "<text text-anchor=\"middle\" x=\"103.06\" y=\"-444.95\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">Start</text>\n",
       "</g>\n",
       "<!-- 2 -->\n",
       "<g id=\"node2\" class=\"node\">\n",
       "<title>2</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"206.11,-396 42.17,-396 0,-360 163.94,-360 206.11,-396\"/>\n",
       "<text text-anchor=\"middle\" x=\"103.06\" y=\"-372.95\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">input Radius =?</text>\n",
       "</g>\n",
       "<!-- 1&#45;&gt;2 -->\n",
       "<g id=\"edge1\" class=\"edge\">\n",
       "<title>1&#45;&gt;2</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M103.06,-431.7C103.06,-424.41 103.06,-415.73 103.06,-407.54\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"106.56,-407.62 103.06,-397.62 99.56,-407.62 106.56,-407.62\"/>\n",
       "</g>\n",
       "<!-- 3 -->\n",
       "<g id=\"node3\" class=\"node\">\n",
       "<title>3</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"144.81,-324 61.31,-324 61.31,-288 144.81,-288 144.81,-324\"/>\n",
       "<text text-anchor=\"middle\" x=\"103.06\" y=\"-300.95\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">Print Radius</text>\n",
       "</g>\n",
       "<!-- 2&#45;&gt;3 -->\n",
       "<g id=\"edge2\" class=\"edge\">\n",
       "<title>2&#45;&gt;3</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M103.06,-359.7C103.06,-352.41 103.06,-343.73 103.06,-335.54\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"106.56,-335.62 103.06,-325.62 99.56,-335.62 106.56,-335.62\"/>\n",
       "</g>\n",
       "<!-- 4 -->\n",
       "<g id=\"node4\" class=\"node\">\n",
       "<title>4</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"154.93,-252 51.18,-252 51.18,-216 154.93,-216 154.93,-252\"/>\n",
       "<text text-anchor=\"middle\" x=\"103.06\" y=\"-228.95\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">Caculating Area</text>\n",
       "</g>\n",
       "<!-- 3&#45;&gt;4 -->\n",
       "<g id=\"edge3\" class=\"edge\">\n",
       "<title>3&#45;&gt;4</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M103.06,-287.7C103.06,-280.41 103.06,-271.73 103.06,-263.54\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"106.56,-263.62 103.06,-253.62 99.56,-263.62 106.56,-263.62\"/>\n",
       "</g>\n",
       "<!-- 5 -->\n",
       "<g id=\"node5\" class=\"node\">\n",
       "<title>5</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"168.43,-180 37.68,-180 37.68,-144 168.43,-144 168.43,-180\"/>\n",
       "<text text-anchor=\"middle\" x=\"103.06\" y=\"-156.95\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">Caculating perimeter</text>\n",
       "</g>\n",
       "<!-- 4&#45;&gt;5 -->\n",
       "<g id=\"edge4\" class=\"edge\">\n",
       "<title>4&#45;&gt;5</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M103.06,-215.7C103.06,-208.41 103.06,-199.73 103.06,-191.54\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"106.56,-191.62 103.06,-181.62 99.56,-191.62 106.56,-191.62\"/>\n",
       "</g>\n",
       "<!-- 6 -->\n",
       "<g id=\"node6\" class=\"node\">\n",
       "<title>6</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"130.06,-108 76.06,-108 76.06,-72 130.06,-72 130.06,-108\"/>\n",
       "<text text-anchor=\"middle\" x=\"103.06\" y=\"-84.95\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">print</text>\n",
       "</g>\n",
       "<!-- 5&#45;&gt;6 -->\n",
       "<g id=\"edge5\" class=\"edge\">\n",
       "<title>5&#45;&gt;6</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M103.06,-143.7C103.06,-136.41 103.06,-127.73 103.06,-119.54\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"106.56,-119.62 103.06,-109.62 99.56,-119.62 106.56,-119.62\"/>\n",
       "</g>\n",
       "<!-- 7 -->\n",
       "<g id=\"node7\" class=\"node\">\n",
       "<title>7</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"130.06,-36 76.06,-36 76.06,0 130.06,0 130.06,-36\"/>\n",
       "<text text-anchor=\"middle\" x=\"103.06\" y=\"-12.95\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">end</text>\n",
       "</g>\n",
       "<!-- 6&#45;&gt;7 -->\n",
       "<g id=\"edge6\" class=\"edge\">\n",
       "<title>6&#45;&gt;7</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M103.06,-71.7C103.06,-64.41 103.06,-55.73 103.06,-47.54\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"106.56,-47.62 103.06,-37.62 99.56,-47.62 106.56,-47.62\"/>\n",
       "</g>\n",
       "</g>\n",
       "</svg>\n"
      ],
      "text/plain": [
       "<graphviz.graphs.Digraph at 0x246244435f0>"
      ]
     },
     "execution_count": 20,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "import graphviz\n",
    "dot=graphviz.Digraph(comment='the round table',name=\"顺序结构\",node_attr={'shape': 'box'})\n",
    "dot.node('1','Start')\n",
    "dot.node('2','input Radius =?',shape='parallelogram')\n",
    "dot.node('3','Print Radius')\n",
    "dot.node('4','Caculating Area')\n",
    "dot.node('5','Caculating perimeter')\n",
    "dot.node('6','print')\n",
    "dot.node('7','end')\n",
    "dot.edges(['12','23','34','45','56','67'])\n",
    "dot"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Ridus= 10\n",
      "面积和周长: 314.15000000000003 62.830000000000005\n"
     ]
    }
   ],
   "source": [
    "''' \n",
    "计算圆周长\n",
    "'''\n",
    "Radius = eval(input(\"请输入圆半径:\"))\n",
    "print(\"Ridus=\",Radius)\n",
    "Area = 3.1415*Radius*Radius\n",
    "perimeter  = 2*3.1415*Radius \n",
    "print(\"面积和周长:\",Area,perimeter)\n",
    "\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<a id=section4></a>\n",
    "## 2.5分支结构\n",
    "### 2.5.1 Python比较运算符\n",
    "\n",
    "以下假设变量a为10，变量b为20：\n",
    "<table><tr>\n",
    "<th width=\"10%\">运算符</th><th>描述</th><th>实例</th>\n",
    "</tr>\n",
    "<tr>\n",
    "<td>==</td><td> 等于 - 比较对象是否相等</td><td> (a == b) 返回 False。 </td>\n",
    "</tr>\n",
    "<tr>\n",
    "<td>!=</td><td> 不等于 - 比较两个对象是否不相等</td><td> (a != b) 返回 True。 </td>\n",
    "</tr>\n",
    "\n",
    "<tr>\n",
    "<td>&gt;</td><td> 大于 - 返回x是否大于y</td><td> (a &gt; b) 返回 False。</td>\n",
    "</tr>\n",
    "<tr>\n",
    "<td>&lt;</td><td> 小于 - 返回x是否小于y。所有比较运算符返回1表示真，返回0表示假。这分别与特殊的变量True和False等价。注意，这些变量名的大写。</td><td> (a &lt; b) 返回 True。 </td>\n",
    "</tr>\n",
    "<tr>\n",
    "<td>&gt;=</td><td> 大于等于 - 返回x是否大于等于y。</td><td> (a &gt;= b) 返回 False。</td>\n",
    "\n",
    "</tr>\n",
    "<tr>\n",
    "<td>&lt;=</td><td> 小于等于 - 返回x是否小于等于y。</td><td> (a &lt;= b) 返回 True。 </td>\n",
    "</tr>\n",
    "</table>\n",
    "\n",
    "### 2.5.2 Python逻辑运算符        \n",
    "Python语言支持逻辑运算符，以下假设变量 a 为 10, b为 20:\n",
    "<table><tr>\n",
    "<th>运算符</th><th>逻辑表达式</th><th>描述</th><th>实例</th>\n",
    "</tr>\n",
    "<tr>\n",
    "<td>and</td><td>x and y</td><td> 布尔\"与\" - 如果 x 为 False，x and y 返回 x 的值，否则返回 y 的计算值。  </td><td> (a and b) 返回 20。</td>\n",
    "</tr>\n",
    "<tr>\n",
    "<td>or</td><td>x or y</td><td>布尔\"或\" - 如果 x 是 True，它返回 x 的值，否则它返回 y 的计算值。</td><td> (a or b) 返回 10。</td>\n",
    "</tr>\n",
    "<tr><td>not</td><td>not x</td><td>布尔\"非\" - 如果 x 为 True，返回 False 。如果 x 为 False，它返回 True。</td><td> not(a and b) 返回 False </td>\n",
    "</tr>\n",
    "</table>\n",
    "\n",
    "[返回](#backup)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 2.5.3 条件控制语句\n",
    "Python 条件语句是通过一条或多条语句的执行结果（True 或者 False）来决定执行的代码块。\n",
    "\n",
    "可以通过下图来简单了解条件语句的执行过程:\n",
    "\n",
    "<img src=\".//img//if-condition.jpg\" width=\"250\"></img>\n",
    "\n",
    "<img src=\".//img//python-if.webp\" width=\"150\"></img>"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 例题 求绝对值。\n",
    "\n",
    "输入：x\n",
    "$$\n",
    "\\begin{align}\n",
    "&&\\left|y\\right |= \\left\\{\\begin{matrix}\n",
    "x & if \\: x\\geq 0\\\\-x& if \\:x< 0\n",
    "\\end{matrix}\\right.{\\color{Red} }\n",
    "\\end{align}\n",
    "$$\n",
    "输出：y"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/svg+xml": [
       "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n",
       "<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\n",
       " \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n",
       "<!-- Generated by graphviz version 12.2.0 (20241103.1931)\n",
       " -->\n",
       "<!-- Title: 分支结构 Pages: 1 -->\n",
       "<svg width=\"420pt\" height=\"404pt\"\n",
       " viewBox=\"0.00 0.00 419.60 404.00\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n",
       "<g id=\"graph0\" class=\"graph\" transform=\"scale(1 1) rotate(0) translate(4 400)\">\n",
       "<title>分支结构</title>\n",
       "<polygon fill=\"white\" stroke=\"none\" points=\"-4,4 -4,-400 415.6,-400 415.6,4 -4,4\"/>\n",
       "<!-- 1 -->\n",
       "<g id=\"node1\" class=\"node\">\n",
       "<title>1</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"232.8,-396 178.8,-396 178.8,-360 232.8,-360 232.8,-396\"/>\n",
       "<text text-anchor=\"middle\" x=\"205.8\" y=\"-371.82\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">开始</text>\n",
       "</g>\n",
       "<!-- 2 -->\n",
       "<g id=\"node2\" class=\"node\">\n",
       "<title>2</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"347.88,-324 121.87,-324 63.72,-288 289.74,-288 347.88,-324\"/>\n",
       "<text text-anchor=\"middle\" x=\"205.8\" y=\"-300.95\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">输入Real Number =?</text>\n",
       "</g>\n",
       "<!-- 1&#45;&gt;2 -->\n",
       "<g id=\"edge1\" class=\"edge\">\n",
       "<title>1&#45;&gt;2</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M205.8,-359.7C205.8,-352.41 205.8,-343.73 205.8,-335.54\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"209.3,-335.62 205.8,-325.62 202.3,-335.62 209.3,-335.62\"/>\n",
       "</g>\n",
       "<!-- 3 -->\n",
       "<g id=\"node3\" class=\"node\">\n",
       "<title>3</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"205.8,-252 0,-234 205.8,-216 411.6,-234 205.8,-252\"/>\n",
       "<text text-anchor=\"middle\" x=\"205.8\" y=\"-228.95\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">判断RealNumber是否大于0？</text>\n",
       "</g>\n",
       "<!-- 2&#45;&gt;3 -->\n",
       "<g id=\"edge2\" class=\"edge\">\n",
       "<title>2&#45;&gt;3</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M205.8,-287.7C205.8,-280.41 205.8,-271.73 205.8,-263.54\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"209.3,-263.62 205.8,-253.62 202.3,-263.62 209.3,-263.62\"/>\n",
       "</g>\n",
       "<!-- 4 -->\n",
       "<g id=\"node4\" class=\"node\">\n",
       "<title>4</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"195.68,-180 31.93,-180 31.93,-144 195.68,-144 195.68,-180\"/>\n",
       "<text text-anchor=\"middle\" x=\"113.8\" y=\"-156.95\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">RealNumber=RealNumber</text>\n",
       "</g>\n",
       "<!-- 3&#45;&gt;4 -->\n",
       "<g id=\"edge3\" class=\"edge\">\n",
       "<title>3&#45;&gt;4</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M185.38,-217.46C173.69,-208.56 158.75,-197.2 145.55,-187.16\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"148.03,-184.65 137.96,-181.38 143.79,-190.22 148.03,-184.65\"/>\n",
       "</g>\n",
       "<!-- 5 -->\n",
       "<g id=\"node5\" class=\"node\">\n",
       "<title>5</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"381.93,-180 213.68,-180 213.68,-144 381.93,-144 381.93,-180\"/>\n",
       "<text text-anchor=\"middle\" x=\"297.8\" y=\"-156.95\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">RealNumber=&#45;RealNumber</text>\n",
       "</g>\n",
       "<!-- 3&#45;&gt;5 -->\n",
       "<g id=\"edge4\" class=\"edge\">\n",
       "<title>3&#45;&gt;5</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M226.22,-217.46C237.92,-208.56 252.86,-197.2 266.05,-187.16\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"267.81,-190.22 273.65,-181.38 263.57,-184.65 267.81,-190.22\"/>\n",
       "</g>\n",
       "<!-- 6 -->\n",
       "<g id=\"node6\" class=\"node\">\n",
       "<title>6</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"301.15,-108 149.47,-108 110.45,-72 262.13,-72 301.15,-108\"/>\n",
       "<text text-anchor=\"middle\" x=\"205.8\" y=\"-83.83\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">输出绝对值</text>\n",
       "</g>\n",
       "<!-- 4&#45;&gt;6 -->\n",
       "<g id=\"edge5\" class=\"edge\">\n",
       "<title>4&#45;&gt;6</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M136.54,-143.7C147.82,-135.11 161.63,-124.61 173.95,-115.24\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"175.96,-118.1 181.8,-109.26 171.72,-112.53 175.96,-118.1\"/>\n",
       "</g>\n",
       "<!-- 5&#45;&gt;6 -->\n",
       "<g id=\"edge6\" class=\"edge\">\n",
       "<title>5&#45;&gt;6</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M275.06,-143.7C263.78,-135.11 249.97,-124.61 237.66,-115.24\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"239.88,-112.53 229.81,-109.26 235.64,-118.1 239.88,-112.53\"/>\n",
       "</g>\n",
       "<!-- 7 -->\n",
       "<g id=\"node7\" class=\"node\">\n",
       "<title>7</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"232.8,-36 178.8,-36 178.8,0 232.8,0 232.8,-36\"/>\n",
       "<text text-anchor=\"middle\" x=\"205.8\" y=\"-11.82\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">结束</text>\n",
       "</g>\n",
       "<!-- 6&#45;&gt;7 -->\n",
       "<g id=\"edge7\" class=\"edge\">\n",
       "<title>6&#45;&gt;7</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M205.8,-71.7C205.8,-64.41 205.8,-55.73 205.8,-47.54\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"209.3,-47.62 205.8,-37.62 202.3,-47.62 209.3,-47.62\"/>\n",
       "</g>\n",
       "</g>\n",
       "</svg>\n"
      ],
      "text/plain": [
       "<graphviz.graphs.Digraph at 0x2461e889ac0>"
      ]
     },
     "execution_count": 22,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "dot=graphviz.Digraph(comment='the round table',name=\"分支结构\",node_attr={'shape': 'box'})\n",
    "dot.node('1','开始')\n",
    "dot.node('2','输入Real Number =?',shape='parallelogram')\n",
    "dot.node('3','判断RealNumber是否大于0？',shape='diamond')\n",
    "dot.node('4','RealNumber=RealNumber')\n",
    "dot.node('5','RealNumber=-RealNumber')\n",
    "dot.node('6','输出绝对值',shape='parallelogram')\n",
    "dot.node('7','结束')\n",
    "dot.edges(['12','23','34','35','46','56','67'])\n",
    "dot"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "绝对值: 10\n"
     ]
    }
   ],
   "source": [
    "'''\n",
    "求绝对值。\n",
    "'''\n",
    "RealNumber = eval(input(\"输入实数:\"))\n",
    "\n",
    "if (RealNumber < 0):\n",
    "    RealNumber = -RealNumber\n",
    "print(\"绝对值:\",RealNumber)\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<a id=section6></a>\n",
    "## 2.6循环结构\n",
    "\n",
    "循环结构：\n",
    "\n",
    "while语句\n",
    "\n",
    "for语句\n",
    "\n",
    "循环分类：  \n",
    "当型循环  \n",
    "直到型循环  \n",
    "\n",
    "\n",
    "\n",
    "\n",
    "[返回](#backup)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "True\n"
     ]
    }
   ],
   "source": [
    "char1 =\"a\"\n",
    "char2=\"b\"\n",
    "char3=\"c\"\n",
    "char=char1+char2+char3\n",
    "boor1=(char[2]==char3)\n",
    "print(boor1)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 例题 整数累加：  \n",
    "输入：正整数R    \n",
    "处理：  \n",
    "S=1+2+3+…+R  \n",
    " <img src=\"./img/int_add.png\" width=\"150\">  \n",
    "输出：输出S"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "累加求和 55\n"
     ]
    }
   ],
   "source": [
    "R = eval(input(\"请输入正整数:\"))\n",
    "i, S = 0, 0\n",
    "while (i<=R):\n",
    "    S = S + i\n",
    "    i = i + 1\n",
    "print(\"累加求和\",S)\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Python 提供了 for 循环和 while 循环（在 Python 中没有 do..while 循环）:\n",
    "\n",
    "<table><tr><th style=\"width:30%\">循环类型</th><th>描述</th></tr>\n",
    "<tr><td><a href=\"/python/python-while-loop.html\" title=\"Python WHILE 循环\">while 循环</a></td><td>在给定的判断条件为 true 时执行循环体，否则退出循环体。</td></tr>\n",
    "<tr><td><a href=\"/python/python-for-loop.html\" title=\" Python FOR 循环\">for 循环</a></td><td>重复执行语句</td></tr>\n",
    "<tr><td><a href=\"/python/python-nested-loops.html\" title=\"Python 循环全套\">嵌套循环</a></td><td>你可以在while循环体中嵌套for循环</td></tr>\n",
    "</table>\n",
    "\n",
    "### 循环控制语句\n",
    "循环控制语句可以更改语句执行的顺序。Python支持以下循环控制语句：\n",
    "<table><tr><th style=\"width:30%\">控制语句</th><th>描述</th></tr>\n",
    "<tr><td><a href=\"/python/python-break-statement.html\" title=\"Python break 语句\">break 语句</a></td><td>在语句块执行过程中终止循环，并且跳出整个循环</td></tr>\n",
    "<tr><td><a href=\"/python/python-continue-statement.html\" title=\"Python  语句\">continue 语句</a></td><td>在语句块执行过程中终止当前循环，跳出该次循环，执行下一次循环。</td></tr>\n",
    "<tr><td><a href=\"/python/python-pass-statement.html\" title=\"Python pass 语句\">pass 语句</a></td><td>pass是空语句，是为了保持程序结构的完整性。</td></tr>\n",
    "</table>"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 例题 绘制数字图画\n",
    "   <img src=\".//img//jqm1.jpg\" width=\"150 \" alt=\"机器猫\">"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "<>:7: SyntaxWarning: invalid escape sequence '\\|'\n",
      "<>:7: SyntaxWarning: invalid escape sequence '\\|'\n",
      "C:\\Users\\10926\\AppData\\Local\\Temp\\ipykernel_5372\\2934885029.py:7: SyntaxWarning: invalid escape sequence '\\|'\n",
      "  \"$@B%8&WM#*oahkbdpqwmZO0QLCJUYXzcvunxrjft/\\|()1{}[]?-_+~<>i!lI;:,\\\"^`'. \")\n"
     ]
    },
    {
     "ename": "FileNotFoundError",
     "evalue": "[Errno 2] No such file or directory: 'E:\\\\OneDrive\\\\Desktop\\\\课堂代码\\\\jqm1.jpg'",
     "output_type": "error",
     "traceback": [
      "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[1;31mFileNotFoundError\u001b[0m                         Traceback (most recent call last)",
      "Cell \u001b[1;32mIn[26], line 11\u001b[0m\n\u001b[0;32m      8\u001b[0m \u001b[38;5;66;03m#生成一个ascii字符列表\u001b[39;00m\n\u001b[0;32m      9\u001b[0m char_len \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mlen\u001b[39m(ascii_char)\n\u001b[1;32m---> 11\u001b[0m pic \u001b[38;5;241m=\u001b[39m plt\u001b[38;5;241m.\u001b[39mimread(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m..\u001b[39m\u001b[38;5;130;01m\\\\\u001b[39;00m\u001b[38;5;124mjqm1.jpg\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n\u001b[0;32m     12\u001b[0m \u001b[38;5;66;03m#使用plt.imread方法来读取图像，对于彩图，返回size = heigth*width*3的图像\u001b[39;00m\n\u001b[0;32m     13\u001b[0m \u001b[38;5;66;03m#matplotlib 中色彩排列是R G B\u001b[39;00m\n\u001b[0;32m     14\u001b[0m \u001b[38;5;66;03m#opencv的cv2中色彩排列是B G R\u001b[39;00m\n\u001b[0;32m     16\u001b[0m pic_heigth, pic_width, _ \u001b[38;5;241m=\u001b[39m pic\u001b[38;5;241m.\u001b[39mshape\n",
      "File \u001b[1;32md:\\Anaconda\\anaconda3\\Lib\\site-packages\\matplotlib\\pyplot.py:2597\u001b[0m, in \u001b[0;36mimread\u001b[1;34m(fname, format)\u001b[0m\n\u001b[0;32m   2593\u001b[0m \u001b[38;5;129m@_copy_docstring_and_deprecators\u001b[39m(matplotlib\u001b[38;5;241m.\u001b[39mimage\u001b[38;5;241m.\u001b[39mimread)\n\u001b[0;32m   2594\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mimread\u001b[39m(\n\u001b[0;32m   2595\u001b[0m         fname: \u001b[38;5;28mstr\u001b[39m \u001b[38;5;241m|\u001b[39m pathlib\u001b[38;5;241m.\u001b[39mPath \u001b[38;5;241m|\u001b[39m BinaryIO, \u001b[38;5;28mformat\u001b[39m: \u001b[38;5;28mstr\u001b[39m \u001b[38;5;241m|\u001b[39m \u001b[38;5;28;01mNone\u001b[39;00m \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mNone\u001b[39;00m\n\u001b[0;32m   2596\u001b[0m ) \u001b[38;5;241m-\u001b[39m\u001b[38;5;241m>\u001b[39m np\u001b[38;5;241m.\u001b[39mndarray:\n\u001b[1;32m-> 2597\u001b[0m     \u001b[38;5;28;01mreturn\u001b[39;00m matplotlib\u001b[38;5;241m.\u001b[39mimage\u001b[38;5;241m.\u001b[39mimread(fname, \u001b[38;5;28mformat\u001b[39m)\n",
      "File \u001b[1;32md:\\Anaconda\\anaconda3\\Lib\\site-packages\\matplotlib\\image.py:1544\u001b[0m, in \u001b[0;36mimread\u001b[1;34m(fname, format)\u001b[0m\n\u001b[0;32m   1537\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28misinstance\u001b[39m(fname, \u001b[38;5;28mstr\u001b[39m) \u001b[38;5;129;01mand\u001b[39;00m \u001b[38;5;28mlen\u001b[39m(parse\u001b[38;5;241m.\u001b[39murlparse(fname)\u001b[38;5;241m.\u001b[39mscheme) \u001b[38;5;241m>\u001b[39m \u001b[38;5;241m1\u001b[39m:\n\u001b[0;32m   1538\u001b[0m     \u001b[38;5;66;03m# Pillow doesn't handle URLs directly.\u001b[39;00m\n\u001b[0;32m   1539\u001b[0m     \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mValueError\u001b[39;00m(\n\u001b[0;32m   1540\u001b[0m         \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mPlease open the URL for reading and pass the \u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[0;32m   1541\u001b[0m         \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mresult to Pillow, e.g. with \u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[0;32m   1542\u001b[0m         \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m``np.array(PIL.Image.open(urllib.request.urlopen(url)))``.\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[0;32m   1543\u001b[0m         )\n\u001b[1;32m-> 1544\u001b[0m \u001b[38;5;28;01mwith\u001b[39;00m img_open(fname) \u001b[38;5;28;01mas\u001b[39;00m image:\n\u001b[0;32m   1545\u001b[0m     \u001b[38;5;28;01mreturn\u001b[39;00m (_pil_png_to_float_array(image)\n\u001b[0;32m   1546\u001b[0m             \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28misinstance\u001b[39m(image, PIL\u001b[38;5;241m.\u001b[39mPngImagePlugin\u001b[38;5;241m.\u001b[39mPngImageFile) \u001b[38;5;28;01melse\u001b[39;00m\n\u001b[0;32m   1547\u001b[0m             pil_to_array(image))\n",
      "File \u001b[1;32md:\\Anaconda\\anaconda3\\Lib\\site-packages\\PIL\\Image.py:3469\u001b[0m, in \u001b[0;36mopen\u001b[1;34m(fp, mode, formats)\u001b[0m\n\u001b[0;32m   3466\u001b[0m     filename \u001b[38;5;241m=\u001b[39m os\u001b[38;5;241m.\u001b[39mpath\u001b[38;5;241m.\u001b[39mrealpath(os\u001b[38;5;241m.\u001b[39mfspath(fp))\n\u001b[0;32m   3468\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m filename:\n\u001b[1;32m-> 3469\u001b[0m     fp \u001b[38;5;241m=\u001b[39m builtins\u001b[38;5;241m.\u001b[39mopen(filename, \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mrb\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n\u001b[0;32m   3470\u001b[0m     exclusive_fp \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mTrue\u001b[39;00m\n\u001b[0;32m   3471\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n",
      "\u001b[1;31mFileNotFoundError\u001b[0m: [Errno 2] No such file or directory: 'E:\\\\OneDrive\\\\Desktop\\\\课堂代码\\\\jqm1.jpg'"
     ]
    }
   ],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "show_heigth = 50\n",
    "show_width = 110\n",
    "#这两个数字是调出来的\n",
    "\n",
    "ascii_char = list(\n",
    "    \"$@B%8&WM#*oahkbdpqwmZO0QLCJUYXzcvunxrjft/\\|()1{}[]?-_+~<>i!lI;:,\\\"^`'. \")\n",
    "#生成一个ascii字符列表\n",
    "char_len = len(ascii_char)\n",
    "\n",
    "pic = plt.imread(\"..\\\\jqm1.jpg\")\n",
    "#使用plt.imread方法来读取图像，对于彩图，返回size = heigth*width*3的图像\n",
    "#matplotlib 中色彩排列是R G B\n",
    "#opencv的cv2中色彩排列是B G R\n",
    "\n",
    "pic_heigth, pic_width, _ = pic.shape\n",
    "#获取图像的高、宽\n",
    "\n",
    "gray = 0.2126 * pic[:, :, 0] + 0.7152 * pic[:, :, 1] + 0.0722 * pic[:, :, 2]\n",
    "#RGB转灰度图的公式 gray = 0.2126 * r + 0.7152 * g + 0.0722 * b\n",
    "\n",
    "#思路就是根据灰度值，映射到相应的ascii_char\n",
    "for i in range(show_heigth):\n",
    "    #根据比例映射到对应的像素\n",
    "    y = int(i * pic_heigth / show_heigth)\n",
    "    text = \"\"\n",
    "    for j in range(show_width):\n",
    "        x = int(j * pic_width / show_width)\n",
    "        text += ascii_char[int(gray[y][x] / 256 * char_len)]\n",
    "    print(text)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# ! pip install -i http源\n",
    "新版ubuntu要求使用https源，要注意。\n",
    "\n",
    "清华：https://pypi.tuna.tsinghua.edu.cn/simple\n",
    "\n",
    "阿里云：https://mirrors.aliyun.com/pypi/simple/\n",
    "\n",
    "中国科技大学 https://pypi.mirrors.ustc.edu.cn/simple/\n",
    "\n",
    "华中理工大学：https://pypi.hustunique.com/\n",
    "\n",
    "山东理工大学：https://pypi.sdutlinux.org/ \n",
    "\n",
    "豆瓣：https://pypi.douban.com/simple/\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "B\n"
     ]
    }
   ],
   "source": [
    "x=int(input('请输入你的成绩:'))\n",
    "if(x>=70 and x<80):\n",
    "    print('C')\n",
    "if(x>=80 and x<90):\n",
    "    print('B')\n",
    "if(x>=60 and x<70):\n",
    "    print('D')\n",
    "if(x<60):\n",
    "    print('E')\n",
    "if(x>90):\n",
    "    print('A')"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "base",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.12.7"
  },
  "orig_nbformat": 4
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
